/*
https://leetcode-cn.com/problems/valid-parentheses/

给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。

有效字符串需满足：
+ 左括号必须用相同类型的右括号闭合。
+ 左括号必须以正确的顺序闭合。

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

输入：s = "()"
输出：true

输入：s = "()[]{}"
输出：true

输入：s = "(]"
输出：false

输入：s = "([)]"
输出：false

输入：s = "{[]}"
输出：true
*/
/*var isValid = function(s){
  let stack = [];
  for (let i = 0; i < s.length; i++) {
    let str = s[i];
    if(str === '(' || str === '[' || str === '{'){
      stack.push(str)
    } else {
      let temp = stack.pop();
      if(str === ')'){
        if(temp !== '(') return false;
      }else if(str === ']'){
        if(temp !== '[') return false;
      }else if(str === '}'){
        if(temp !== '{') return false;
      }
    }
  }
  return stack.length === 0;
}*/

var isValid = function(s){
  let map = {
   ')':'(',
   '}':'{',
   ']':'['
  }
  let stack = [];
  for (let k of s) {
    //右括号，代表出 pop
    if (map[k] && stack[stack.length - 1]/*我们是用数组实现的，索引越大的越接近栈顶, stack.length-1 即栈顶 （后插入的,需要先完成的）*/ === map[k]) {
      stack.pop();

    //进
    }else {
      stack.push(k);
    }
  }
  return stack.length === 0;
}

/*
(()())

)())  ×
*/
